home *** CD-ROM | disk | FTP | other *** search
/ Young Minds / Young Minds Interactive CD-ROM.ISO / omega / odefs.h < prev    next >
Encoding:
C/C++ Source or Header  |  1989-08-08  |  27.0 KB  |  1,261 lines

  1. /* omega copyright (c) 1987,1988 by Laurence Raphael Brothers */
  2. /* This file is the header file for all omega modules */
  3. /* odefs.h */
  4.  
  5. /* omega will NOT function unless the implementor sets the appropriate
  6. definitions in the following section. */
  7.  
  8. /*--------------------------USER DEFINITIONS--------------------------*/
  9.  
  10. /* The average system V user should probably uncomment the following
  11. two definitions. */
  12.  
  13. /* Implementor should uncomment the following if his system uses
  14. string.h instead of strings.h (try man strings) */
  15.  
  16. /* #define STRING */
  17.  
  18. /* Implementor should uncomment the following if random and srandom 
  19.    are not available  (try man random) */
  20.  
  21. /* #define NORANDOM */
  22.  
  23. /* Implementor should uncomment the following if omega appears to
  24. redraw the screen excessively. */
  25.  
  26. /* #define EXCESSIVE_REDRAW */
  27.  
  28. /* The following definition is recommended. Remove it only if you have
  29. huge amounts of disk space and are annoyed at waiting a few more seconds
  30. on save and restore. */
  31.  
  32. #define COMPRESS_SAVE_FILES
  33.  
  34. /* Implementor should set the following three definitions: */
  35.  
  36. /* OMEGALIB is where all the data files reside. 
  37.    Note the final / is necessary.
  38.    This might usually be "/usr/games/lib/omegalib/" */
  39.  
  40. #define OMEGALIB "/usr/games/lib/omegalib/"
  41.  
  42. /* set WIZARD to implementor's username */
  43.  
  44. #define WIZARD "brothers"
  45.  
  46. /* If CATCH_SIGNALS is set to 1, will not dump core, nicer for players. */
  47. /* dbx still intercepts the signals first, so it's ok for debugging */
  48.  
  49. #define CATCH_SIGNALS 1
  50.  
  51.  
  52. /*---------------------------SYSTEM DEFINITIONS---------------------------*/
  53.  
  54. /* Don't change anything from here on (unless you know what you're doing) */
  55. #define VERSION 71
  56. #define VERSIONSTRING "omega version 0.71 (beta)"
  57.  
  58. #define VACANT 0
  59. #define ABORT -1
  60. #define CASHVALUE -2
  61.  
  62. /* moderately arbitrary but probably cannot be easily changed */
  63. #define MAXWIDTH 64
  64. #define MAXLENGTH 64
  65. #define SMALLSCREENLENGTH 16
  66.  
  67. /* number of slots in inventory. Cannot be changed without work */
  68. #define MAXITEMS 16
  69.  
  70. /* number of slots in pack. Should be <= 26. */
  71. #define MAXPACK 26
  72.  
  73. /* number of items in pawn shop. Should be <= 26 */
  74. #define PAWNITEMS 10
  75.  
  76. /* Verbosity levels */
  77. #define TERSE 0
  78. #define MEDIUM 1
  79. #define VERBOSE 2 
  80.  
  81. /* Arbitrary. Max of the levels in the dungeons */
  82. #define MAXLEVELS 21
  83.  
  84. /* levels in each dungeon */
  85. #define ASTRALLEVELS 5
  86. #define SEWERLEVELS 18
  87. #define CASTLELEVELS 16
  88. #define CAVELEVELS 10
  89. #define VOLCANOLEVELS 20
  90.  
  91. /* Overall Game Progress Vector Bits */
  92. /* Long had BETTER have at least 32 bits.... */
  93. #define SPOKE_TO_DRUID 1L
  94. #define COMPLETED_CAVES 2L
  95. #define COMPLETED_SEWERS 4L
  96. #define COMPLETED_CASTLE 8L
  97. #define COMPLETED_ASTRAL 16L
  98. #define COMPLETED_VOLCANO 32L
  99. #define KILLED_DRAGONLORD 64L
  100. #define KILLED_EATER 128L
  101. #define KILLED_LAWBRINGER 256L
  102. #define COMPLETED_CHALLENGE 512L
  103. #define SOLD_CONDO 1024L
  104. #define FAST_MOVE 2048L
  105. #define SKIP_PLAYER 4096L
  106. #define SKIP_MONSTERS 8192L
  107. #define MOUNTED 16384L
  108. #define SUPPRESS_PRINTING 32768L
  109. #define LOST 65536L
  110. #define ARENA_MODE 131072L
  111. #define CHEATED 262144L
  112. #define BANK_BROKEN 524288L
  113. #define CLUB_MEMBER 1048576L
  114. #define PREPARED_VOID 2097152L
  115. #define DESTROYED_ORDER 4194304L
  116. #define GAVE_STARGEM 8388608L
  117. #define ATTACKED_ORACLE 16777216L
  118. #define UNDEAD_GUARDS 33554432L
  119.  
  120. /* general environment types */
  121. #define E_NEVER_NEVER_LAND 0
  122. #define E_COUNTRYSIDE 1
  123. #define E_CITY 2
  124. #define E_VILLAGE 3
  125. #define E_TACTICAL_MAP 4
  126. #define E_SEWERS 5
  127. #define E_CASTLE 6
  128. #define E_CAVES 7
  129. #define E_VOLCANO 8
  130. #define E_ASTRAL 9
  131. #define E_ARENA 10
  132. #define E_HOVEL 11
  133. #define E_MANSION 12
  134. #define E_HOUSE 13
  135. #define E_DLAIR 14
  136. #define E_ABYSS 15
  137. #define E_STARPEAK 16
  138. #define E_MAGIC_ISLE 17
  139. #define E_TEMPLE 18
  140. #define E_CIRCLE 19
  141. #define E_COURT 20
  142.  
  143. /* player game status */
  144. #define DEAD 1
  145. #define QUIT 2
  146. #define WIN 3
  147. #define BIGWIN 4
  148.  
  149. /* kind of arbitrary */
  150. #define MAXROOMS 48
  151. #define MAXCONNECTIONS 4 
  152.  
  153. /* some random characters */
  154. #define ESCAPE 27
  155. #define RETURN 13
  156. #define LINEFEED 10
  157. #define BACKSPACE 8
  158. #define DELETE 127
  159.  
  160.  
  161. /* tac mode action definitions */
  162. /* have to remember to find where these are used, mostly unused, now! */
  163. #define DISENGAGE 10
  164. #define BLOCK 20
  165. #define CUT 30
  166. #define THRUST 40
  167. #define MAGIC 50
  168. #define LUNGE 60
  169. #define RIPOSTE 70
  170. #define WIELD 80
  171. #define PICK_UP 90
  172.  
  173. /* as in attack low, block high, etc. */
  174. /* These values may be added to the ones above to get things like
  175.    block high, cut low, etc. CLEVER is only used by some monsters
  176.    to cheat with.... */
  177. #define LOW 1
  178. #define CENTER 2
  179. #define HIGH 3
  180. #define CLEVER 4
  181.  
  182.  
  183. /* weapon types */
  184. #define CUTTING 1
  185. #define THRUSTING 2
  186. #define STRIKING 3
  187. #define MISSILE 4
  188.  
  189. /* random aux constants */
  190. /* aux field for private residences in city */
  191. #define BURGLED 2
  192. #define LOCKED 3
  193. #define UNLOCKED 0
  194.  
  195. /* cannot use M command on site with this aux value */
  196. #define NOCITYMOVE 666
  197.  
  198. /* bow and crossbow object aux fields */
  199. #define LOADED 1
  200. #define UNLOADED 0
  201.  
  202. /* alignment used randomly throughout*/
  203. #define LAWFUL 1
  204. #define CHAOTIC 2
  205. #define NEUTRAL 3
  206.  
  207. /* spells */
  208. #define NUMSPELLS 41
  209.  
  210. #define S_MON_DET 0
  211. #define S_OBJ_DET 1
  212. #define S_MISSILE 2
  213. #define S_FIREBOLT 3
  214. #define S_TELEPORT 4
  215. #define S_LBALL 5
  216. #define S_SLEEP 6
  217. #define S_DISRUPT 7
  218. #define S_DISINTEGRATE 8
  219. #define S_POLYMORPH 9
  220. #define S_HEAL 10
  221. #define S_DISPEL 11
  222. #define S_IDENTIFY 12
  223. #define S_BREATHE 13
  224. #define S_INVISIBLE 14
  225. #define S_WARP 15
  226. #define S_ENCHANT 16
  227. #define S_BLESS 17
  228. #define S_RESTORE 18
  229. #define S_CURE 19
  230. #define S_TRUESIGHT 20
  231. #define S_HELLFIRE 21
  232. #define S_KNOWLEDGE 22
  233. #define S_HERO 23
  234. #define S_RETURN 24
  235. #define S_DESECRATE 25
  236. #define S_HASTE 26
  237. #define S_SUMMON 27
  238. #define S_SANCTUARY 28
  239. #define S_ACCURACY 29
  240. #define S_RITUAL 30
  241. #define S_FEAR 31
  242. #define S_APPORT 32
  243. #define S_SHADOWFORM 33
  244. #define S_ALERT 34
  245. #define S_REGENERATE 35
  246. #define S_SANCTIFY 36
  247. #define S_CLAIRVOYANCE 37
  248. #define S_DRAIN 38
  249. #define S_LEVITATE 39
  250. #define S_WISH 40
  251.  
  252. /* ranks in guilds, etc */
  253. #define NUMRANKS 9
  254.  
  255. #define LEGION 0
  256. #define ARENA 1
  257. #define COLLEGE 2
  258. #define THIEVES 3
  259. #define ORDER 4
  260. #define CIRCLE 5
  261. #define NOBILITY 6
  262. #define PRIESTHOOD 7
  263. #define ADEPT 8
  264.  
  265. #define LEGIONAIRE 1
  266. #define CENTURION 2
  267. #define FORCE_LEADER 3
  268. #define COLONEL 4
  269. #define COMMANDANT 5
  270.  
  271. #define TRAINEE 1
  272. #define BESTIARIUS 2
  273. #define RETIARIUS 3
  274. #define GLADIATOR 4
  275. #define CHAMPION 5
  276.  
  277. #define NOVICE 1
  278. #define STUDENT 2
  279. #define PRECEPTOR 3
  280. #define MAGE 4
  281. #define ARCHMAGE 5
  282.  
  283. #define TMEMBER 1
  284. #define ATHIEF 2
  285. #define THIEF 3
  286. #define TMASTER 4
  287. #define SHADOWLORD 5
  288.  
  289. #define GALLANT 1
  290. #define GUARDIAN 2
  291. #define CHEVALIER 3
  292. #define PALADIN 4
  293. #define JUSTICIAR 5
  294.  
  295. #define INITIATE 1
  296. #define ENCHANTER 2
  297. #define SORCEROR 3
  298. #define HIGHSORCEROR 4
  299. #define PRIME 5
  300.  
  301. #define COMMONER 1
  302. #define ESQUIRE 2
  303. #define KNIGHT 3
  304. #define LORD 4
  305. #define DUKE 5
  306.  
  307. #define LAY 1
  308. #define ACOLYTE 2
  309. #define PRIEST 3
  310. #define SPRIEST 4
  311. #define HIGHPRIEST 5
  312.  
  313. /* different priesthoods */
  314. #define ODIN 1
  315. #define SET 2
  316. #define ATHENA 3
  317. #define HECATE 4
  318. #define DRUID 5
  319. #define DESTINY 6
  320.  
  321.  
  322.  
  323. /* MONSTER STATUS/ABILITY BITS */
  324. #define AWAKE 1
  325. #define MOBILE 2
  326. #define HOSTILE 4
  327. #define WANDERING 16
  328. #define HUNGRY 32
  329. #define GREEDY 64
  330. #define NEEDY  128
  331. #define ONLYSWIM 256
  332. #define FLYING 512
  333. #define INTANGIBLE 1024
  334. #define M_INVISIBLE 2048
  335. #define SWIMMING 4096
  336. #define POISONOUS 8192
  337. #define EDIBLE 16384
  338.  
  339.  
  340. /* PLAYER STATUS INDICES */
  341. #define NUMSTATI 25
  342.  
  343. #define ACCURACY 0
  344. #define BLINDED 1
  345. #define SLOWED 2
  346. #define DISPLACED 3
  347. #define SLEPT 4
  348. #define DISEASED 5
  349. #define POISONED 6
  350. #define HASTED 7
  351. #define BREATHING 8
  352. #define INVISIBLE 9
  353. #define REGENERATING 10
  354. #define VULNERABLE 11
  355. #define BERSERK 12
  356. #define IMMOBILE 13
  357. #define ALERT 14
  358. #define AFRAID 15
  359. #define HERO 16
  360. #define LEVITATING 17
  361. #define ACCURATE 18
  362. #define TRUESIGHT 19
  363. #define SHADOWFORM 20
  364. #define ILLUMINATION 21
  365. #define DEFLECTION 22
  366. #define PROTECTION 23
  367. /* PROTECTION is deviant -- indicates protective value, not duration */
  368. #define RETURNING 24
  369. /* RETURNING is somewhat deviant--how many turns 'til RETURN spell goes off */
  370.  
  371. /* player immunity indices */
  372. /* also monster immunity bits (2^n) */
  373. /* also damage types */
  374. #define NUMIMMUNITIES 14
  375.  
  376. #define UNSTOPPABLE 0 
  377. #define NORMAL_DAMAGE 1
  378. #define FLAME 2
  379. #define COLD 3
  380. #define ELECTRICITY 4
  381. #define POISON 5
  382. #define ACID 6
  383. #define FEAR 7
  384. #define SLEEP 8
  385. #define NEGENERGY 9
  386. #define OTHER_MAGIC 10
  387. #define THEFT 11
  388. #define GAZE 12
  389. #define INFECTION 13
  390. #define EVERYTHING -1
  391.  
  392.  
  393. /* location lstatus bits */
  394. #define SEEN 1
  395. #define LIT 2
  396. #define SECRET 4
  397. #define STOPS 8
  398.  
  399.  
  400. /* room string id */
  401. /* for use in roomname() */
  402. #define NUMROOMNAMES 30
  403.  
  404. /* normal room name indices start after the RS_ constants */
  405. #define ROOMBASE 39
  406. #define RS_COURT 38
  407. #define RS_ZORCH 37
  408. #define RS_CIRCLE 36
  409. #define RS_MAGIC_ISLE 35
  410. #define RS_STARPEAK 34
  411. #define RS_VOLCANO 33
  412. #define RS_HIGHASTRAL 32
  413. #define RS_FIREPLANE 31
  414. #define RS_AIRPLANE 30
  415. #define RS_WATERPLANE 29
  416. #define RS_EARTHPLANE 28
  417. #define RS_LOWERASTRAL 27
  418. #define RS_CLOSET 26
  419. #define RS_SECRETPASSAGE 25
  420. #define RS_DININGROOM 24
  421. #define RS_BATHROOM 23
  422. #define RS_BEDROOM 22
  423. #define RS_KITCHEN 21
  424. #define RS_DROWNED_SEWER 20
  425. #define RS_DRAINED_SEWER 19
  426. #define RS_SEWER_DUCT 18
  427. #define RS_ARENA 17
  428. #define RS_COUNTRYSIDE 16
  429. #define RS_DRUID 15
  430. #define RS_HECATE 14
  431. #define RS_ATHENA 13
  432. #define RS_SET 12
  433. #define RS_ODIN 11
  434. #define RS_DESTINY 10
  435. #define RS_ADEPT 9
  436. #define RS_WYRM 8
  437. #define RS_OCEAN 7 
  438. #define RS_PONDS 6
  439. #define RS_DRAGONLORD 5
  440. #define RS_GOBLINKING 4
  441. #define RS_CAVERN 3
  442. #define RS_CORRIDOR 2
  443. #define RS_WALLSPACE 1
  444.  
  445. /* objects, locations, and terrain; characters to draw */
  446. #define SPACE ' '
  447. #define WALL '#'
  448. #define PORTCULLIS '7'
  449. #define OPEN_DOOR '|'
  450. #define CLOSED_DOOR '-'
  451. #define WHIRLWIND '6'
  452. #define ABYSS '0'
  453. #define LAVA '`'
  454. #define HEDGE '\"'
  455. #define WATER '~' 
  456. #define FIRE ';'
  457. #define TRAP '^'
  458. #define LIFT '_'
  459. #define UP '<'
  460. #define DOWN '>'
  461. #define FLOOR '.'
  462. #define PLAYER '@'
  463. #define CORPSE '+'
  464. #define STATUE '1'
  465. #define RUBBLE '4'
  466. #define ALTAR '8'
  467. #define CASH '$'      /* various kinds of money */
  468. #define PILE '*'      /* several objects in one place */
  469. #define FOOD '%'
  470. #define WEAPON ')'
  471. #define MISSILEWEAPON '('
  472. #define SCROLL '?'
  473. #define POTION '!'
  474. #define ARMOR ']'
  475. #define SHIELD '['
  476. #define CLOAK '}'
  477. #define BOOTS '{'
  478. #define STICK '/'
  479.  
  480. #define RING '='
  481. #define THING '\\'
  482. #define ARTIFACT '&'
  483.  
  484. /* TERRAIN TYPES */
  485. #define PLAINS '-'
  486. #define TUNDRA '_'
  487. #define ROAD '.'
  488. #define MOUNTAINS '^'
  489. #define PASS 'v'
  490. #define RIVER '~'
  491. #define CITY 'O'
  492. #define VILLAGE 'o'
  493. #define FOREST '('
  494. #define JUNGLE ')'
  495. #define SWAMP '='
  496. #define VOLCANO '!'
  497. #define CASTLE '%'
  498. #define TEMPLE 'X'
  499. #define CAVES '*'
  500. #define DESERT '\"'
  501. #define CHAOS_SEA '+'
  502. #define STARPEAK '|'
  503. #define DRAGONLAIR '$'
  504. #define MAGIC_ISLE '&'
  505.  
  506. #define CHAIR '5'
  507. #define SAFE '3'
  508. #define FURNITURE '2'
  509. #define BED '9'
  510.  
  511. /* wow, all characters used! */
  512.  
  513.  
  514. /* total number of player options */
  515. #define NUMOPTIONS 9
  516.  
  517. /* number of options with TRUE/FALSE values */
  518. #define NUMTFOPTIONS 7
  519.  
  520. /* The slot number of the two options not in Player.options */
  521. #define VERBOSITY_LEVEL 8
  522. #define SEARCH_DURATION 9
  523.  
  524. /* Player.options bits */
  525. #define BELLICOSE 1 
  526. #define JUMPMOVE 2
  527. #define RUNSTOP 4
  528. #define PICKUP 8
  529. #define CONFIRM 16
  530. #define TOPINV 32
  531. #define PACKADD 64
  532.  
  533. /* This has to be changed whenever an item is added */
  534. #define NUMSCROLLS 24
  535. #define NUMPOTIONS 18
  536. #define NUMFOODS 16
  537. #define NUMTHINGS 26
  538. #define NUMWEAPONS 41
  539. #define NUMARMOR 17
  540. #define NUMSHIELDS 8
  541. #define NUMCLOAKS 7
  542. #define NUMBOOTS 7
  543. #define NUMRINGS 10
  544. #define NUMSTICKS 17
  545. #define NUMARTIFACTS 24
  546.  
  547. /* running sum of itemtypes, for indexing into Objects array */
  548. #define THINGID 0 
  549. #define FOODID NUMTHINGS
  550. #define SCROLLID (FOODID + NUMFOODS)
  551. #define POTIONID (SCROLLID + NUMSCROLLS)
  552. #define WEAPONID (POTIONID + NUMPOTIONS)
  553. #define ARMORID (WEAPONID + NUMWEAPONS)
  554. #define SHIELDID (ARMORID + NUMARMOR)
  555. #define CLOAKID (SHIELDID + NUMSHIELDS)
  556. #define BOOTID (CLOAKID + NUMCLOAKS)
  557. #define RINGID (BOOTID + NUMBOOTS)
  558. #define STICKID (RINGID + NUMRINGS)
  559. #define ARTIFACTID (STICKID + NUMSTICKS)
  560. #define CASHID (ARTIFACTID+NUMARTIFACTS)
  561. /* Corpse's aux field is monster id */
  562. #define CORPSEID (CASHID+1)
  563.  
  564. #define TOTALITEMS (CORPSEID+1) 
  565.  
  566. /* describing unique items and monsters */
  567. #define COMMON 0
  568. #define UNIQUE_UNMADE 1
  569. #define UNIQUE_MADE 2
  570.  
  571. /* general item function id's */
  572. #define I_NO_OP 0
  573. #define I_NOTHING 1
  574.  
  575.   /* note some of these functions are for other types of items too */
  576.  
  577.     /* scroll functions */
  578. #define I_BLESS 101
  579. #define I_ACQUIRE 102
  580. #define I_ENCHANT 103
  581. #define I_TELEPORT 104
  582. #define I_WISH 105
  583. #define I_CLAIRVOYANCE 106
  584. #define I_DISPLACE 107
  585. #define I_ID 108
  586. #define I_FIREFLASH 109
  587. #define I_SPELLS 110
  588. #define I_JANE_T 111
  589. #define I_ALERT 112
  590. #define I_FLUX 113
  591. #define I_CHARGE 114
  592. #define I_WARP 115
  593. #define I_KNOWLEDGE 116
  594. #define I_LAW 117
  595. #define I_HINT 118
  596. #define I_HERO 119
  597. #define I_TRUESIGHT 120
  598. #define I_ILLUMINATE 121
  599. #define I_DEFLECT 122
  600.  
  601.     /* potion functions */
  602. #define I_HEAL 201
  603. #define I_OBJDET 202
  604. #define I_MONDET 203
  605. #define I_SLEEP_SELF 204
  606. #define I_RESTORE 205
  607. #define I_NEUTRALIZE_POISON 206
  608. #define I_SPEED 207
  609. #define I_AZOTH 208
  610. #define I_REGENERATE 210
  611. #define I_INVISIBLE 211
  612. #define I_BREATHING 212
  613. #define I_FEAR_RESIST 213
  614. #define I_AUGMENT 214
  615. #define I_CHAOS 215
  616. #define I_ACCURACY 216
  617. #define I_LEVITATION 217
  618. #define I_CURE 218
  619.  
  620.     /* stick functions */
  621. #define I_FIREBOLT 301
  622. #define I_LBOLT 302
  623. #define I_MISSILE 303
  624. #define I_SLEEP_OTHER 304
  625. #define I_FIREBALL 305
  626. #define I_LBALL 306
  627. #define I_SUMMON 307
  628. #define I_HIDE 308
  629. #define I_DISRUPT 309
  630. #define I_DISINTEGRATE 310
  631. #define I_SNOWBALL 311
  632. #define I_APPORT 312
  633. #define I_DISPEL 313
  634. #define I_POLYMORPH 314
  635. #define I_FEAR 315
  636.  
  637.     /* food functions */
  638. #define I_FOOD 401
  639. #define I_LEMBAS 402
  640. #define I_STIM 403
  641. #define I_POW 404
  642. #define I_IMMUNE 405
  643. #define I_POISON_FOOD 406
  644. #define I_CORPSE 407
  645. #define I_PEPPER_FOOD 408
  646. #define I_CANNIBAL 409
  647. #define I_INEDIBLE 410
  648.  
  649.     /* boots functions */
  650. #define I_PERM_SPEED 501
  651. #define I_PERM_HERO 502
  652. #define I_PERM_LEVITATE 503
  653. #define I_PERM_AGILITY 504
  654. #define I_BOOTS_JUMPING 505
  655. #define I_BOOTS_7LEAGUE 506
  656.  
  657.     /* cloak functions */
  658. #define I_PERM_DISPLACE 601
  659. #define I_PERM_NEGIMMUNE 602
  660. #define I_PERM_INVISIBLE 603
  661. #define I_PERM_ACCURACY 604
  662. #define I_PERM_PROTECTION 605
  663. #define I_PERM_TRUESIGHT 606
  664.  
  665.     /* ring functions */
  666. #define I_PERM_VISION 701
  667. #define I_PERM_BURDEN 702
  668. #define I_PERM_STRENGTH 703
  669. #define I_PERM_GAZE_IMMUNE 704
  670. #define I_PERM_FIRE_RESIST 705
  671. #define I_PERM_POISON_RESIST 706
  672. #define I_PERM_REGENERATE 707
  673. #define I_PERM_KNOWLEDGE 708
  674.  
  675.     /* armor functions */
  676. #define I_PERM_ENERGY_RESIST 801
  677. #define I_PERM_BREATHING 802
  678. #define I_PERM_FEAR_RESIST 803
  679. #define I_NORMAL_ARMOR 804
  680.  
  681. /* artifact functions */
  682. #define I_ORBFIRE 901
  683. #define I_ORBWATER 902
  684. #define I_ORBEARTH 903
  685. #define I_ORBAIR 904
  686. #define I_ORBMASTERY 905
  687. #define I_ORBDEAD 906
  688. #define I_CRYSTAL 907
  689. #define I_ANTIOCH 908
  690. #define I_KOLWYNIA 909
  691. #define I_DEATH 910
  692. #define I_ENCHANTMENT 911
  693. #define I_HELM 912
  694. #define I_LIFE 913
  695. #define I_JUGGERNAUT 914
  696. #define I_SYMBOL 915
  697. #define I_STARGEM 916
  698. #define I_SCEPTRE 917
  699. #define I_PLANES 918
  700.  
  701. /* weapons functions */
  702. #define I_NORMAL_WEAPON 1001
  703. #define I_LIGHTSABRE 1002
  704. #define I_DEMONBLADE 1003
  705. #define I_MACE_DISRUPT 1004
  706. #define I_TANGLE 1005
  707. #define I_ARROW 1006
  708. #define I_BOLT 1007
  709. #define I_VORPAL 1008
  710. #define I_DESECRATE 1009
  711. #define I_FIRESTAR 1010
  712. #define I_DEFEND 1011
  713. #define I_VICTRIX 1012
  714. #define I_EMPIRE 1013
  715. #define I_SCYTHE 1014
  716. #define I_ACIDWHIP 1015
  717.  
  718. /* thing functions */
  719. #define I_PICK 1101
  720. #define I_KEY 1102
  721. #define I_SHOVEL 1103 /* unused */
  722. #define I_EXCAVATOR 1104 /* unused */
  723. #define I_PERM_ILLUMINATE 1105
  724. #define I_TRAP 1106
  725. #define I_RAISE_PORTCULLIS 1107
  726.  
  727. /* shield functions */
  728. #define I_PERM_DEFLECT 1201
  729. #define I_NORMAL_SHIELD 1202
  730.  
  731. /* monster function ids */
  732. /* Its conceivable for a function of one type to be called when another
  733. would usually occur. A monster's special function may be an extra move,
  734. for example. */
  735.  
  736. #define M_NO_OP -1
  737.  
  738. /* talk functions */
  739. #define M_TALK_STUPID 101
  740. #define M_TALK_SILENT 102
  741. #define M_TALK_HUNGRY 103
  742. #define M_TALK_GREEDY 104
  743. #define M_TALK_TITTER 105
  744. #define M_TALK_MAN 106
  745. #define M_TALK_ROBOT 107
  746. #define M_TALK_EVIL 108
  747. #define M_TALK_BURBLE 109
  748. #define M_TALK_SLITHY 110
  749. #define M_TALK_MIMSY 111
  750. #define M_TALK_SEDUCTOR 112
  751. #define M_TALK_MP 113
  752. #define M_TALK_IM 114
  753. #define M_TALK_GUARD 115
  754. #define M_TALK_GHOST 116
  755. #define M_TALK_HINT 117
  756. #define M_TALK_BEG 118
  757. #define M_TALK_EF 119
  758. #define M_TALK_GF 120
  759. #define M_TALK_MORGON 121
  760. #define M_TALK_LB 122
  761. #define M_TALK_DEMONLOVER 123
  762. #define M_TALK_ASSASSIN 124
  763. #define M_TALK_NINJA 125
  764. #define M_TALK_THIEF 126
  765. #define M_TALK_MERCHANT 127
  766. #define M_TALK_HORSE 128
  767. #define M_TALK_PARROT 129
  768. #define M_TALK_ANIMAL 130
  769. #define M_TALK_HYENA 131
  770. #define M_TALK_SERVANT 132
  771. #define M_TALK_SCREAM 133
  772. #define M_TALK_DRUID 134
  773. #define M_TALK_ARCHMAGE 135
  774. #define M_TALK_PRIME 136
  775.  
  776. /* ability functions */
  777. #define M_SP_SURPRISE 201
  778. #define M_SP_MP 202
  779. #define M_SP_THIEF 203
  780. #define M_SP_AGGRAVATE 204
  781. #define M_SP_POISON_CLOUD 205
  782. #define M_SP_HUGE 206
  783. #define M_SP_SUMMON 207
  784. #define M_SP_ILLUSION 208
  785. #define M_SP_FLUTTER 209
  786. #define M_SP_ESCAPE 210
  787. #define M_SP_SPELL 211
  788. #define M_SP_EXPLODE 212
  789. #define M_SP_DEMON 213
  790. #define M_SP_ACID_CLOUD 214
  791. #define M_SP_WHIRL 215
  792. #define M_SP_GHOST 216
  793. #define M_SP_WHISTLEBLOWER 217
  794. #define M_SP_EATER 218
  795. #define M_SP_LAWBRINGER 219
  796. #define M_SP_DRAGONLORD 220
  797. #define M_SP_DE 221
  798. #define M_SP_DEMONLOVER 222
  799. #define M_SP_SEDUCTOR 223
  800. #define M_SP_MASTER 224
  801. #define M_SP_WYRM 225
  802. #define M_SP_BLACKOUT 226
  803. #define M_SP_BOG 227
  804. #define M_SP_MERCHANT 228
  805. #define M_SP_WERE 229
  806. #define M_SP_LEASH 230
  807. #define M_SP_SERVANT 231
  808. #define M_SP_AV 232
  809. #define M_SP_LW 233
  810. #define M_SP_SWARM 234
  811. #define M_SP_ANGEL 235
  812. #define M_SP_MB 236
  813. #define M_SP_MIRROR 237
  814. #define M_SP_RAISE 238
  815. #define M_SP_DEATH 239
  816. #define M_SP_COURT 240
  817. #define M_SP_LAIR 241
  818. #define M_SP_PRIME 242
  819.  
  820. /* rangestrike functions */
  821. #define M_STRIKE_MISSILE 301
  822. #define M_STRIKE_FBOLT 302
  823. #define M_STRIKE_LBALL 303
  824. #define M_STRIKE_FBALL 304
  825. #define M_STRIKE_BLIND 305
  826. #define M_STRIKE_SNOWBALL 306
  827. #define M_STRIKE_MASTER 307
  828. #define M_STRIKE_SONIC 308
  829.  
  830. /* combat functions */
  831. #define M_MELEE_NORMAL 401
  832. #define M_MELEE_FIRE 402
  833. #define M_MELEE_DRAGON 403
  834. #define M_MELEE_MP 404
  835. #define M_MELEE_ELEC 405
  836. #define M_MELEE_POISON 406
  837. #define M_MELEE_NG 407
  838. #define M_MELEE_SUCCUBUS 408
  839. #define M_MELEE_SPIRIT 409
  840. #define M_MELEE_DISEASE 410
  841. #define M_MELEE_SLEEP 411
  842. #define M_MELEE_COLD 412
  843. #define M_MELEE_MASTER 413
  844. #define M_MELEE_GRAPPLE 414
  845. #define M_MELEE_DEATH 415
  846.  
  847. /* movement functions */
  848. #define M_MOVE_NORMAL 501
  849. #define M_MOVE_FLUTTER 502
  850. #define M_MOVE_TELEPORT 503
  851. #define M_MOVE_FOLLOW 504
  852. #define M_MOVE_RANDOM 505
  853. #define M_MOVE_SMART 506
  854. #define M_MOVE_SPIRIT 507
  855. #define M_MOVE_SCAREDY 508
  856. #define M_MOVE_CONFUSED 509
  857. #define M_MOVE_ANIMAL 510
  858.  
  859. /* MLx -> index to Monsters starting for level x */
  860. /* MLx -> number of monsters of level x or less */
  861. /* NML_x -> number of monsters of level x */
  862. /* NML-X must be changed whenever a monster is added */
  863. #define ML0 0
  864. #define NML_0 9
  865. #define ML1 (ML0 + NML_0)
  866. #define NML_1 22
  867. #define ML2 (ML1 + NML_1)
  868. #define NML_2 14
  869. #define ML3 (ML2 + NML_2)
  870. #define NML_3 15
  871. #define ML4 (ML3 + NML_3)
  872. #define NML_4 18
  873. #define ML5 (ML4 + NML_4)
  874. #define NML_5 14
  875. #define ML6 (ML5 + NML_5)
  876. #define NML_6 13
  877. #define ML7 (ML6 + NML_6)
  878. #define NML_7 15
  879. #define ML8 (ML7 + NML_7)
  880. #define NML_8 12
  881. #define ML9 (ML8 + NML_8)
  882. #define NML_9 8
  883. #define ML10 (ML9 + NML_9)
  884. #define NML_10 10
  885.  
  886. #define NUMMONSTERS (ML10 + NML_10)
  887.  
  888. /* Some monster ID's : (Those that are explicitly named in code) */
  889. /* Actually, there are still many magic constants floating around. */
  890. /* Eventually I'll get around to making each monster's id a constant.... */
  891. #define RANDOM -1
  892. #define NPC (ML0+4)
  893. #define HISCORE_NPC (ML0+8)
  894. #define BUNNY (ML0+5)
  895. #define BLACKSNAKE (ML1+14)
  896. #define HAWK (ML1+13)
  897. #define IMPALA (ML1+19)
  898. #define WOLF (ML2+10)
  899. #define LION (ML3+8)
  900. #define BRIGAND (ML3+9)
  901. #define QUAIL (ML1+11)
  902. #define BADGER (ML1+12)
  903. #define DEER (ML1+14)
  904. #define BEAR (ML3+10)
  905. #define ANTEATER (ML1+16)
  906. #define PARROT (ML1+20)
  907. #define MAMBA (ML3+11)
  908. #define ANT (ML2+11)
  909. #define HYENA (ML1+21)
  910. #define ELEPHANT (ML2+12)
  911. #define TROUT (ML1+18)
  912. #define BASS (ML1+19)
  913. #define MANOWAR (ML3+12)
  914. #define CROC (ML4+8)
  915. #define BOGTHING (ML5+8)
  916. #define CAMEL (ML1+15)
  917. #define SHEEP (ML0+5)
  918. #define GHOST (ML2+6)
  919. #define HAUNT (ML4+5)
  920. #define SPECTRE (ML5+5)
  921. #define LICHE (ML6+5)
  922. #define HORSE (ML2+13)
  923.  
  924.  
  925. /* location functions */
  926. #define L_NO_OP 0
  927.  
  928. /* random sites */
  929. #define L_LIFT 1
  930. #define L_BALANCESTONE 2
  931. #define L_FIRE 3
  932. #define L_WHIRLWIND 4
  933. #define L_VOIDSTONE 5
  934. #define L_WARNING 6
  935. #define L_ARENA_EXIT 7
  936. #define L_HOUSE_EXIT 8
  937. #define L_SAFE 9
  938.  
  939. /* city level shop and guild functions */
  940. /* following are those in CitySiteList */
  941. #define NUMCITYSITES 26
  942. #define CITYSITEBASE 10
  943. #define L_CHARITY 10
  944. #define L_ARMORER 11
  945. #define L_CLUB 12
  946. #define L_GYM 13
  947. #define L_THIEVES_GUILD 14
  948. #define L_COLLEGE 15
  949. #define L_HEALER 16
  950. #define L_CASINO 17
  951. #define L_TAVERN 18
  952. #define L_MERC_GUILD 19
  953. #define L_ALCHEMIST 20
  954. #define L_SORCERORS 21
  955. #define L_CASTLE 22
  956. #define L_ARENA 23
  957. #define L_DPW 24
  958. #define L_LIBRARY 25
  959. #define L_PAWN_SHOP 26
  960. #define L_BANK 27
  961. #define L_CONDO 28
  962. #define L_ORACLE 29
  963. #define L_ORDER 30
  964. #define L_DINER 31
  965. #define L_COMMANDANT 32
  966. #define L_CRAP 33
  967. #define L_TEMPLE 34
  968. #define L_COUNTRYSIDE 35
  969. /* end of city sites */
  970.  
  971. /* random sites */
  972. #define L_JAIL 36
  973. #define L_TEMPLE_WARNING 37
  974. #define L_LAWSTONE 38
  975. #define L_CHAOSTONE 39
  976.  
  977. /* final abyss sites ignore levitation*/
  978. #define L_EARTH_STATION 40
  979. #define L_FIRE_STATION 41
  980. #define L_WATER_STATION 42
  981. #define L_AIR_STATION 43
  982. #define L_VOID_STATION 44
  983. #define L_VOID 45
  984. #define L_VOICE1 46
  985. #define L_VOICE2 47
  986. #define L_VOICE3 48
  987.  
  988. #define L_SACRIFICESTONE 49
  989.  
  990. /* circle hq sites */
  991. #define L_TOME1 50
  992. #define L_TOME2 51
  993. #define L_ENTER_CIRCLE 52
  994. #define L_CIRCLE_LIBRARY 53
  995.  
  996. /* other site functions */
  997. #define L_BROTHEL 54
  998. #define L_DRUID 55
  999. #define L_ALTAR 56
  1000.  
  1001. #define L_GARDEN 57
  1002. #define L_ADEPT 58
  1003. #define L_SEWER 59
  1004.  
  1005. #define L_OMEGA 60
  1006. #define L_CARTOGRAPHER 61
  1007. #define L_STABLES 62
  1008. #define L_COMMONS 63
  1009. #define L_GRANARY 64
  1010. #define L_MAZE 65
  1011. #define L_HOVEL 66
  1012. #define L_HOUSE 67
  1013. #define L_MANSION 68
  1014. #define L_OCCUPIED_HOUSE 69
  1015. #define L_TACTICAL_EXIT 70
  1016. #define L_VAULT 71
  1017. #define L_CEMETARY 72
  1018. #define L_THRONE 73
  1019. #define L_ESCALATOR 74
  1020. #define L_ENTER_COURT 75
  1021.  
  1022. #define L_TRIFID 76
  1023. #define L_FINAL_ABYSS 77
  1024. #define L_RAISE_PORTCULLIS 78
  1025.  
  1026. #define L_MINDSTONE 79
  1027.  
  1028. /* above LEVITATION_AVOIDANCE, no effect if player is levitating */
  1029. #define LEVITATION_AVOIDANCE 80
  1030.  
  1031. /* random sites */
  1032. #define L_CHAOS 81
  1033. #define L_WATER 82
  1034. #define L_LAVA 83
  1035. #define L_MAGIC_POOL 84
  1036. #define L_PORTCULLIS_TRAP 85
  1037. #define L_DROP_EVERY_PORTCULLIS 87
  1038. #define L_PORTCULLIS 88
  1039.  
  1040.  
  1041. /* traps */
  1042. #define NUMTRAPS 13
  1043. #define TRAP_BASE 89
  1044.  
  1045. /* traps */
  1046. #define L_TRAP_DART 89
  1047. #define L_TRAP_PIT 90
  1048. #define L_TRAP_DOOR 91
  1049. #define L_TRAP_SNARE 92
  1050. #define L_TRAP_BLADE 93
  1051. #define L_TRAP_FIRE 94
  1052. #define L_TRAP_TELEPORT 95
  1053. #define L_TRAP_DISINTEGRATE 96
  1054. #define L_TRAP_SLEEP_GAS 97
  1055. #define L_TRAP_ACID 98
  1056. #define L_TRAP_MANADRAIN 99
  1057. #define L_TRAP_ABYSS 100
  1058. #define L_TRAP_SIREN 101
  1059.  
  1060. /* more random sites */
  1061. #define L_STATUE_WAKE 102
  1062. #define L_STATUE_RANDOM 103
  1063.  
  1064. #define L_HEDGE 104
  1065. #define L_RUBBLE 105
  1066.  
  1067. #define L_ABYSS 106
  1068.  
  1069. /* player possession slots */
  1070. /* slot 0 should not be filled when out of inventory_control() */
  1071.  
  1072. #define O_UP_IN_AIR 0
  1073. #define O_READY_HAND 1
  1074. #define O_WEAPON_HAND 2
  1075. #define O_LEFT_SHOULDER 3
  1076. #define O_RIGHT_SHOULDER 4
  1077. #define O_BELT1 5
  1078. #define O_BELT2 6
  1079. #define O_BELT3 7
  1080. #define O_SHIELD 8 
  1081. #define O_ARMOR 9
  1082. #define O_BOOTS 10
  1083. #define O_CLOAK 11
  1084. #define O_RING1 12
  1085. #define O_RING2 13
  1086. #define O_RING3 14
  1087. #define O_RING4 15
  1088.  
  1089. /* structure definitions */
  1090.  
  1091. struct room {
  1092.   int lighted; 
  1093.   int left,right,top,bottom;
  1094.   int rsi; /* index into roomname switch */
  1095. };
  1096.  
  1097.  
  1098.  
  1099. struct spell {
  1100.   char known;
  1101.   char id;
  1102.   char powerdrain;
  1103. } ;
  1104.  
  1105.  
  1106. struct monster {
  1107.   struct objectlist *possessions;
  1108.   int attacked,aux1,aux2,x,y,click;
  1109.   int id,hp,hit,ac,dmg,sense,wakeup,level,speed,sleep,treasure;
  1110.   int xpv,corpseweight,corpsevalue,transformid,startthing,uniqueness;
  1111.   int talkf,movef,meleef,strikef,specialf;
  1112.   long status,immunity;
  1113.   char monchar;
  1114.   char *monstring,*corpsestr,*meleestr;
  1115. };
  1116.  
  1117.  
  1118. struct monsterlist {
  1119.   struct monster *m;
  1120.   struct monsterlist *next;
  1121. };
  1122.  
  1123.  
  1124.  
  1125.  
  1126. struct player {
  1127.   int str,con,dex,agi,iq,pow,maxstr,maxcon,maxdex,maxagi,maxiq,maxpow;
  1128.   int xp,level,hp,maxhp,hit,dmg,absorption,speed,click;
  1129.   int defense,food,alignment,mana,maxmana;
  1130.   int cash,patron,birthday;
  1131.   char preference;
  1132.   int sx,sy; /* sanctuary coordinates */
  1133.   int x,y; /* current player coordinates */
  1134.   int itemweight,maxweight;
  1135.   int immunity[NUMIMMUNITIES];
  1136.   int status[NUMSTATI];
  1137.   long options;
  1138.   int rank[NUMRANKS];
  1139.   int guildxp[NUMRANKS];
  1140.   char name[64];
  1141.   char meleestr[64];
  1142.   struct object *possessions[MAXITEMS];
  1143.   struct object *pack[MAXPACK];
  1144.   int packptr;
  1145. };
  1146.  
  1147.  
  1148.  
  1149. struct object {
  1150.   int id,weight,plus,charge,dmg,hit,aux,number,fragility;
  1151.   int basevalue, known, used, blessing,type,uniqueness,usef,level;
  1152.   char objchar,*objstr,*truename,*cursestr;
  1153. };
  1154.  
  1155.  
  1156.  
  1157. struct objectlist {
  1158.   struct object *thing;
  1159.   struct objectlist *next;
  1160. };
  1161.  
  1162.  
  1163.  
  1164. /* terrain locations */
  1165. struct terrain {
  1166.   char base_terrain_type;
  1167.   char current_terrain_type;
  1168.   char aux;
  1169.   char explored;
  1170. };
  1171.  
  1172. /* dungeon locations */
  1173. struct location {
  1174.   char p_locf; /* function executed when moved on */
  1175.   int lstatus; /* seen,stopsrun,lit,secret, */
  1176.   char roomnumber; /* so room can be named */
  1177.   char locchar; /* terrain type */
  1178.   char showchar; /*char instantaneously drawn for site */
  1179.   int aux; /* signifies various things */
  1180.   int buildaux; /* used in constructing level */
  1181.   struct objectlist *things; 
  1182.   struct monster *creature;
  1183.  };
  1184.  
  1185.  
  1186. struct level {
  1187.   char depth; /* which level is this */
  1188.   struct level *next; /* pointer to next level in dungeon */
  1189.   struct location site[MAXWIDTH][MAXLENGTH]; /* dungeon data */
  1190.   char generated; /* has the level been made (visited) yet? */
  1191.   char numrooms; /* number of rooms on level */
  1192.   char tunnelled; /* amount of tunnelling done on this level */
  1193.   struct monsterlist *mlist; /* List of monsters on level */
  1194.   int environment; /* where kind of level is this? */
  1195.   int deepest; /*If level is dungeon head, deepest level made */
  1196. };
  1197.  
  1198.  
  1199. /* random typedef's */
  1200.  
  1201. typedef struct monsterlist mltype;
  1202. typedef mltype *pml;
  1203.  
  1204. typedef struct monster montype;
  1205. typedef montype *pmt;
  1206.  
  1207. typedef struct location loctype;
  1208. typedef loctype *plc;
  1209.  
  1210. typedef struct level levtype;
  1211. typedef levtype *plv;
  1212.  
  1213. typedef struct object objtype;
  1214. typedef objtype *pob;
  1215.  
  1216. typedef struct objectlist oltype;
  1217. typedef oltype *pol;
  1218.  
  1219. /* random  function declarations from system libraries */
  1220.  
  1221. char *malloc(),*calloc(),*getlogin();
  1222. int free();
  1223. long time();
  1224.  
  1225. #ifdef NORANDOM
  1226. int rand();
  1227. int srand();
  1228. #define RANDFUNCTION rand()
  1229. #define SRANDFUNCTION srand((int)(time((long *)NULL)+Seed))
  1230. #endif
  1231.  
  1232. #ifndef NORANDOM
  1233. long random();
  1234. int srandom();
  1235. #define RANDFUNCTION random()
  1236. #define SRANDFUNCTION srandom((int)(time((long *)NULL)+Seed))
  1237. #endif
  1238.  
  1239.  
  1240. #define pow2(n) (1 << n)
  1241.  
  1242.  
  1243. /* systemV for some reason uses string.h instead of strings.h */
  1244. /* Also, random and srandom are unlikely to be found on system V... */
  1245.  
  1246. #ifdef STRING
  1247. #include <string.h>
  1248. #endif
  1249.  
  1250. #ifndef STRING
  1251. #include <strings.h>
  1252. #endif
  1253.  
  1254. #include <stdio.h>
  1255.  
  1256. #ifndef TRUE
  1257. #define TRUE 1
  1258. #define FALSE 0
  1259. #endif
  1260.  
  1261.